iT邦幫忙

2024 iThome 鐵人賽

0
自我挑戰組

前端工程師的java學習紀錄系列 第 39

Day39-集合Collection

  • 分享至 

  • xImage
  •  

collection 是java中一種容器,用來存放資料,並且只能夠儲存object 的資料(存放基本類型時會自動轉換成包裝類),是屬於接口而非,放在java.util.Collection中。

當中主要包含了兩個分類:

  • List:跟array 很像,可以存放有序、可重複的資料結構
  • Set:可以存放無序、不可重複的資料結構

List

List中有三個常用實作類

  • ArrayList(使用List時主要使用的實作類):基本上是array ,但是可以把它當成動態 的array,當新增長度不夠時,底層 會自動擴充長度,因為有index適用於查詢元素。(原本多寫了適用於新增,感謝Chikuwa告知,已修正)
  • LinkedList:每一個元素都會有對應的上一個元素和下一個元素的資訊,適用於插入刪除 元素。
  • Vector:java最一開始的List 類,後來在jdk5.0後新增了ListArrayList 後,把它納入List 底下,基本上已經很少使用此類。

Collection 中常用主要使用的方法

使用ArrayList 作為範例

新增元素:add(Object obj)addAll(Collection other)

Collection coll = new ArrayList();

coll.add("ABC");
coll.add("DEF");
coll.add(123);
System.out.println(coll);  //[ABC, DEF, 123] 
Collection coll2 = new ArrayList();
coll2.add("abc");
coll2.add(456);

coll.add(coll2);
coll.addAll(coll2);
System.out.println(coll); //[ABC, DEF, 123, [abc, 456], abc, 456] 

使用add() 時,會將參數的物件當成一個 元素放加入ArrayList ,使用addAll() 時,會將參數集合 中的每一個元素個別加入

長度:int size()

coll.size(); // 6

是否為空:boolean isEmpty()

coll.isEmpty(); // false

是否包含某個物件:boolean contains(Object obj)

是否包含某個集合:boolean containsAll(Collection coll)

是否和某個物件相等:boolean equals(Object obj)

coll.contains("ABC"); // true
coll.contains(888); // false

coll.containsAll(coll2); // true;

使用自定義的類時,要特別注意需要將Object 類中的equals() 方法重寫,預設是使用Object類 中的equals() 進行比較,裡面只是使用== 進行比較,若沒有重寫equals() ,只會使用記憶體中的地址進行比較。

清空:void clear()

coll.clear();
System.out.println(coll); // []

刪除:boolean remove(Object obj)boolean removeAll(Collection coll)

coll.remove("ABC");
System.out.println(coll); // [DEF, 123]

將有交集的集合保留,其餘刪除:boolean retainsAll(Collection coll)

coll.retainsAll(coll2);
System.out.println(coll); //[abc, 456] 

如果放入的集合完全沒有交集時,則會把原本的集合清空

將集合變成陣列:Object toArray()

Object[] arr = coll.toArray();
System.out.println(Arrays.toString(arr); // [ABC, DEF, 123] 

集合的迭代器

Iterator iterator = coll.iterator();

是否有下一個元素:boolean hasNext()

將集合中的第一個元素提取出來:Object next()

iterator.hasNext(); // true
iterator.next(); // ABC

// 對集合的每個元素進行操作
while(iterator.hasNext()) {
	System.out.println(iterator.next()); // 依次將coll的元素印出
}

上一篇
Day38-Comparable、Comparator
下一篇
Day40-集合Collection(二)-List、Set
系列文
前端工程師的java學習紀錄41
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

2
Chikuwa
iT邦新手 2 級 ‧ 2024-11-27 12:30:38

Hi,文中提到「ArrayList 因為有 index,適用於新增元素」,感覺不太對喔

因為如果你透過 index,在陣列的「中間」新增元素,那插入點後方的「所有」元素就必須往後面的位置搬移,會有這樣子的成本~

Jasper iT邦新手 5 級 ‧ 2024-11-28 22:50:19 檢舉

是的,原本想表達的是在最後面新增元素~~~ 但好像沒有必要XD
已將內文修正,並備註你的名字,非常感謝你的回覆和分享~~~

我要留言

立即登入留言